<?php

/* Dès que file_get_contents() retourne une erreur 503, c'est que Google a blacklisté l'IP */

error_reporting(E_ALL);
ini_set('max_execution_time', 500); // Porte le temps maxi d'exécution à 1 minute


$searchUrl = "http://www.google.fr/search?q=";
$limit = 100; // Min 10 ; Max 100
$results = array();


if(isset($_GET["searchString"]))
{
	if(!empty($_GET["searchString"]))
	{
		$results = getResults($_GET["searchString"]);
		
		// À ce stade du programme, on a plusieurs centaines de résultats (avec "facebook social plugin" reply like "add a comment")
		// On va maintenant faire une recherche de type site:website.dns "facebook social plugin" reply like "add a comment"
		// A partir des DNS qu'on a déjà relevé dans nos premiers résultats
		$dns = array();
		
		
		for($i = 0; $i < count($results); ++$i)
		{
			
			preg_match('@^(?:http[s]?://)?([^/]+)@i', $results[$i], $matches); // Récupère le DNS http://www.dns.ext
			preg_match('/[^.]+\.[^.]+$/', $matches[1], $matches); // récupère dns.ext

			if(!in_array($matches[0], $dns))
				$dns[] = $matches[0];
		}
		
		
		// Nous avons maintenant $dns rempli des DNS cités par Google lors de la recherche.
		// On va maintenant faire des recherches par DNS avec site: et enrichir les résultats
		for($i = 0; $i < count($dns); ++$i) // ***README*** Google blacklist l'IP avant que la boucle ne finisse !!! Procéder par tranche de 10 et récupérer progressivement les résultats....
		{
			$results = array_merge($results, getResults("site:".$dns[$i]." ".$_GET["searchString"]));
		}
		
		for($i = 0; $i < count($results); ++$i)
		{
			echo "INSERT IGNORE INTO `urls` VALUE('', \"".$results[$i]."\");<br/>";
		}
		
		
	}
}

else
{
	echo "Précisez un paramètre GET searchString";
}



function getResults($param)
{
	global $searchUrl;
	global $limit;
	
	$searchString = $searchUrl.urlencode($param)."&num=".$limit;
	
	$pageContent = utf8_encode(file_get_contents($searchString));
	$links = getLinks($pageContent);
	$links = resultLinks($links);
	
	$results = $links;
	
	$i = 1;
	while(count($links) > 10)
	{
		$searchString = $searchUrl.urlencode($param)."&num=".$limit."&start=".($i*$limit);
		
		$pageContent = utf8_encode(file_get_contents($searchString));
		$links = getLinks($pageContent);
		$links = resultLinks($links);
		
		$results = array_merge($results, $links);
		$i++;
	}
	
	return $results;
}

function getLinks($pageContent)
{	
	$match = array();
	
	preg_match_all("'<\s*a\s.*?href\s*=\s*			# find <a href=
					([\"\'])?						# find single or double quote
					(?(1) (.*?)\\1 | ([^\s\>]+))	# if quote found, match up to next matching
													# quote, otherwise match up to next space
					'isx",$pageContent, $links);

	while(list($key,$val) = each($links[2]))
	{
		if(!empty($val))
			$match[] = $val;
	}				
	
	while(list($key,$val) = each($links[3]))
	{
		if(!empty($val))
			$match[] = $val;
	}		
	
	return $match;
}

function resultLinks($links)
{
	$resultLinks = array();
	global $results;
	
	for($i = 0; $i < count($links); ++$i)
	{
		if(strpos($links[$i], "/url?q=") !== FALSE)
		{
			$currentResult = substr($links[$i], strpos($links[$i], "http")); // Supprime le début : /url?q= 
			$currentResult = substr($currentResult, 0, strpos($currentResult, "&amp;sa")); // Supprime tout ce qu'il y a Après l'url
			
			if(!in_array(urldecode($currentResult), $results))
				$resultLinks[] = urldecode($currentResult); // Décode l'url pour les caractères hexadécimaux (%3D, %20 etc etc)
		}
	}
	
	return $resultLinks;
}

?>